package GUIClient;

import Client.FilesOperationsClient;
import Client.StartCloseSession;
import Client.UsersOperationsClient;
import CommonOperationsClientServer.FilesOperations;
import CommonOperationsClientServer.OperationsRefactor;
import SwingWorkers.SwingWorkerCreateTree;
import SwingWorkers.SwingWorkerExpandTree;
import Users.User;
import java.awt.Desktop;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.URI;
import java.net.URISyntaxException;
import javax.swing.table.DefaultTableModel;

public final class GUIPrincipal extends javax.swing.JFrame {

    private String localDirectory = "";
    private String serverDirectory = "";
    private String clientLog = "userLog.txt";
    private Socket connection = null;
    private PrintWriter output;
    private BufferedReader input;
    private User user;

    public GUIPrincipal() {
        initComponents();
        initButtonsDisabled();
        FilesOperations.createFile(clientLog);
        SwingWorkerCreateTree createTree = new SwingWorkerCreateTree(localFoldersTree, clientStateTextPane,
                "/", false, input, output);
        createTree.execute();
        localFoldersTextField.setText("/");
        serverFoldersTree.setModel(GUIExtraFunctions.treeFinal("", true, input, output));
    }

    public void enabled(boolean state) {
        setEnabled(state);
    }

    private void goToURL(String url) {
        try {
            Desktop.getDesktop().browse(new URI(url));
        } catch (URISyntaxException | IOException e) {
        }
    }

    private void initButtonsDisabled() {
        connectButton.setEnabled(true);
        disconnectButton.setEnabled(false);
        uploadFileButton.setEnabled(false);
        deleteFileButton.setEnabled(false);
        downloadFileButton.setEnabled(false);
        createFolderButton.setEnabled(false);
        deleteFolderButton.setEnabled(false);
        createUserButton.setEnabled(false);
        deleteUserButton.setEnabled(false);
        serverFoldersTextField.setEnabled(false);
        serverFoldersTree.setEnabled(false);
        menuBarEditServer.setEnabled(false);
        menuBarEditExecuteCommand.setEnabled(false);
        menuBarEditStopServer.setEnabled(false);
    }

    private void userButtonEnabled(boolean user_privileged) {
        connectButton.setEnabled(false);
        disconnectButton.setEnabled(true);
        uploadFileButton.setEnabled(true);
        downloadFileButton.setEnabled(true);
        if (user_privileged) {
            deleteFileButton.setEnabled(true);
            createFolderButton.setEnabled(true);
            deleteFolderButton.setEnabled(true);
            createUserButton.setEnabled(true);
            deleteUserButton.setEnabled(true);
            menuBarEditServer.setEnabled(true);
            menuBarEditStopServer.setEnabled(true);
        }
        serverFoldersTextField.setEnabled(true);
        serverFoldersTree.setEnabled(true);
        menuBarEditExecuteCommand.setEnabled(true);
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        GUINewUser = new javax.swing.JFrame();
        nameNewUserLabel = new javax.swing.JLabel();
        pass1NewUserLabel = new javax.swing.JLabel();
        pass2NewUserLabel = new javax.swing.JLabel();
        rootNewUserCheckBox = new javax.swing.JCheckBox();
        createNewUserButton = new javax.swing.JButton();
        nameNewUserField = new javax.swing.JTextField();
        pass1NewUserPassField = new javax.swing.JPasswordField();
        pass2NewUserPassField = new javax.swing.JPasswordField();
        GUIDeleteUser = new javax.swing.JFrame();
        selectDeleteUserLabel = new javax.swing.JLabel();
        selectDeleteUserScrollPanel = new javax.swing.JScrollPane();
        selectDeleteUserTable = new javax.swing.JTable();
        deleteDeleteUserButton = new javax.swing.JButton();
        warningDeleteUserLabel = new javax.swing.JLabel();
        cancelDeleteUserButton = new javax.swing.JButton();
        GUINewFolder = new javax.swing.JFrame();
        nameNewFolderLabel = new javax.swing.JLabel();
        nameNewFolderField = new javax.swing.JTextField();
        createNewFolderButton = new javax.swing.JButton();
        GUIMissingData = new javax.swing.JFrame();
        missingDataLabel = new javax.swing.JLabel();
        missingDataButton = new javax.swing.JButton();
        missingDataLabel2 = new javax.swing.JLabel();
        missingDataLabel3 = new javax.swing.JLabel();
        GUIServerConfiguration = new javax.swing.JFrame();
        ipServerConfigurationLabel = new javax.swing.JLabel();
        ipServerConfigurationTextField = new javax.swing.JTextField();
        portServerConfigurationLabel = new javax.swing.JLabel();
        portServerConfigurationTextField = new javax.swing.JTextField();
        directoryServerConfigurationLabel = new javax.swing.JLabel();
        directoryServerConfigurationTextLabel = new javax.swing.JTextField();
        directoryConfigurationServerConfigurationLabel = new javax.swing.JLabel();
        directoryConfigurationServerConfigurationTextField = new javax.swing.JTextField();
        fileConfigurationServerConfigurationLabel = new javax.swing.JLabel();
        fileConfigurationServerConfigurationTextLabel = new javax.swing.JTextField();
        fileLoggingServerConfigurationLabel = new javax.swing.JLabel();
        fileLoggingServerConfigurationTextField = new javax.swing.JTextField();
        fileUsersServerConfigurationLabel = new javax.swing.JLabel();
        fileUsersServerConfigurationTextField = new javax.swing.JTextField();
        directoryNoPrivilegedServerConfigurationLabel = new javax.swing.JLabel();
        directoryNoPrivilegedServerConfigurationTextField = new javax.swing.JTextField();
        acceptServerConfigurationButton = new javax.swing.JButton();
        fileLoggingUserLabel = new javax.swing.JLabel();
        fileLoggingUserTextField = new javax.swing.JTextField();
        cancelServerConfigurationButton = new javax.swing.JButton();
        GUIUMLClient = new javax.swing.JFrame();
        imageUMLClientLabel = new javax.swing.JLabel();
        GUIAbout = new javax.swing.JFrame();
        googleCodeAboutButton = new javax.swing.JButton();
        universityAboutButton = new javax.swing.JButton();
        googleCodeAboutLabel = new javax.swing.JLabel();
        universityAboutLabel = new javax.swing.JLabel();
        authorNameAboutLabel = new javax.swing.JLabel();
        authorCareerAboutLabel = new javax.swing.JLabel();
        authorSubjectAboutLabel = new javax.swing.JLabel();
        GUIExecuteCommand = new javax.swing.JFrame();
        commandTextFieldCommand = new javax.swing.JTextField();
        commandLabelCommand = new javax.swing.JLabel();
        selectDestinyComboCommand = new javax.swing.JComboBox();
        responseCommandScroll = new javax.swing.JScrollPane();
        responseCommandTextPane = new javax.swing.JTextPane();
        GUIUMLServer = new javax.swing.JFrame();
        imageUMLServerLabel = new javax.swing.JLabel();
        userLabel = new javax.swing.JLabel();
        userTextField = new javax.swing.JTextField();
        passLabel = new javax.swing.JLabel();
        serverLabel = new javax.swing.JLabel();
        serverTextField = new javax.swing.JTextField();
        portLabel = new javax.swing.JLabel();
        portTextField = new javax.swing.JTextField();
        separatorUserConnectState = new javax.swing.JSeparator();
        clientStateLabel = new javax.swing.JLabel();
        clientStateScrollPane = new javax.swing.JScrollPane();
        clientStateTextPane = new javax.swing.JTextPane();
        separatorClientStateFolders = new javax.swing.JSeparator();
        localFoldersLabel = new javax.swing.JLabel();
        passPasswordField = new javax.swing.JPasswordField();
        serverFoldersLabel = new javax.swing.JLabel();
        localFoldersScrollPane = new javax.swing.JScrollPane();
        localFoldersTree = new javax.swing.JTree();
        serverFoldersScrollPane = new javax.swing.JScrollPane();
        serverFoldersTree = new javax.swing.JTree();
        separatorFoldersFileData = new javax.swing.JSeparator();
        serverStateLabel = new javax.swing.JLabel();
        serverStateScrollPane = new javax.swing.JScrollPane();
        serverStateTextPane = new javax.swing.JTextPane();
        localFoldersTextField = new javax.swing.JTextField();
        serverFoldersTextField = new javax.swing.JTextField();
        uploadFileButton = new javax.swing.JButton();
        deleteFileButton = new javax.swing.JButton();
        downloadFileButton = new javax.swing.JButton();
        createFolderButton = new javax.swing.JButton();
        deleteFolderButton = new javax.swing.JButton();
        createUserButton = new javax.swing.JButton();
        deleteUserButton = new javax.swing.JButton();
        connectButton = new javax.swing.JButton();
        disconnectButton = new javax.swing.JButton();
        dateModifiedFileLabel = new javax.swing.JLabel();
        dateModifiedFileTextField = new javax.swing.JTextField();
        sizeFileLabel = new javax.swing.JLabel();
        sizeFileTextField = new javax.swing.JTextField();
        typeFileLabel = new javax.swing.JLabel();
        typeFileTextLabel = new javax.swing.JTextField();
        permissionsFileLabel = new javax.swing.JLabel();
        permissionsFileTextLabel = new javax.swing.JTextField();
        visibilityFileLabel = new javax.swing.JLabel();
        visibilityFileTextLabel = new javax.swing.JTextField();
        separatorFileDataServerState = new javax.swing.JSeparator();
        menuBar = new javax.swing.JMenuBar();
        menuBarFile = new javax.swing.JMenu();
        menuBarFileExit = new javax.swing.JMenuItem();
        menuBarEdit = new javax.swing.JMenu();
        menuBarEditServer = new javax.swing.JMenuItem();
        menuBarEditStopServer = new javax.swing.JMenuItem();
        menuBarEditSeparator = new javax.swing.JPopupMenu.Separator();
        menuBarEditExecuteCommand = new javax.swing.JMenuItem();
        menuBarHelp = new javax.swing.JMenu();
        menuBarHelpInstructions = new javax.swing.JMenuItem();
        menuBarHelpSeparator1 = new javax.swing.JPopupMenu.Separator();
        menuBarHelpProtocol = new javax.swing.JMenuItem();
        menuBarHelpUMLClient = new javax.swing.JMenuItem();
        menuBarHelpUMLServer = new javax.swing.JMenuItem();
        menuBarHelpSeparator2 = new javax.swing.JPopupMenu.Separator();
        menuBarHelpAbout = new javax.swing.JMenuItem();

        GUINewUser.setTitle("Nuevo Usuario...");
        GUINewUser.setLocationByPlatform(true);
        GUINewUser.setMinimumSize(new java.awt.Dimension(400, 231));
        GUINewUser.setResizable(false);

        nameNewUserLabel.setText("Nombre del nuevo usuario:");

        pass1NewUserLabel.setText("Contraseña del nuevo usuario:");

        pass2NewUserLabel.setText("Repetir Contraseña:");

        rootNewUserCheckBox.setText("Usuario con privilegios");
        rootNewUserCheckBox.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);

        createNewUserButton.setText("Crear Usuario");
        createNewUserButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                createNewUserButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout GUINewUserLayout = new javax.swing.GroupLayout(GUINewUser.getContentPane());
        GUINewUser.getContentPane().setLayout(GUINewUserLayout);
        GUINewUserLayout.setHorizontalGroup(
            GUINewUserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(GUINewUserLayout.createSequentialGroup()
                .addGroup(GUINewUserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, GUINewUserLayout.createSequentialGroup()
                        .addGap(0, 0, Short.MAX_VALUE)
                        .addComponent(createNewUserButton))
                    .addGroup(GUINewUserLayout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(GUINewUserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(GUINewUserLayout.createSequentialGroup()
                                .addGroup(GUINewUserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(nameNewUserLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(pass1NewUserLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(pass2NewUserLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(GUINewUserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(pass1NewUserPassField)
                                    .addComponent(pass2NewUserPassField, javax.swing.GroupLayout.DEFAULT_SIZE, 228, Short.MAX_VALUE)
                                    .addComponent(nameNewUserField)))
                            .addComponent(rootNewUserCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
                .addContainerGap())
        );
        GUINewUserLayout.setVerticalGroup(
            GUINewUserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(GUINewUserLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(GUINewUserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(nameNewUserLabel)
                    .addComponent(nameNewUserField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(GUINewUserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(pass1NewUserLabel)
                    .addComponent(pass1NewUserPassField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(GUINewUserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(pass2NewUserLabel)
                    .addComponent(pass2NewUserPassField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(rootNewUserCheckBox)
                .addGap(18, 18, 18)
                .addComponent(createNewUserButton)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        GUIDeleteUser.setTitle("Borrar Usuario...");
        GUIDeleteUser.setLocationByPlatform(true);
        GUIDeleteUser.setMinimumSize(new java.awt.Dimension(472, 290));
        GUIDeleteUser.setResizable(false);

        selectDeleteUserLabel.setText("Selecciona al usuario que deseas borrar:");

        selectDeleteUserTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
            },
            new String [] {
                "Nombre", "Contraseña", "Privilegios"
            }
        ));
        selectDeleteUserTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        selectDeleteUserScrollPanel.setViewportView(selectDeleteUserTable);

        deleteDeleteUserButton.setText("Borrar Usuario");
        deleteDeleteUserButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                deleteDeleteUserButtonActionPerformed(evt);
            }
        });

        warningDeleteUserLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        warningDeleteUserLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        warningDeleteUserLabel.setText("¡Atención! Es una acción que no se puede deshacer");

        cancelDeleteUserButton.setText("Cancelar");
        cancelDeleteUserButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelDeleteUserButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout GUIDeleteUserLayout = new javax.swing.GroupLayout(GUIDeleteUser.getContentPane());
        GUIDeleteUser.getContentPane().setLayout(GUIDeleteUserLayout);
        GUIDeleteUserLayout.setHorizontalGroup(
            GUIDeleteUserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(GUIDeleteUserLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(GUIDeleteUserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(GUIDeleteUserLayout.createSequentialGroup()
                        .addComponent(deleteDeleteUserButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(cancelDeleteUserButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addComponent(selectDeleteUserScrollPanel)
                    .addComponent(warningDeleteUserLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(GUIDeleteUserLayout.createSequentialGroup()
                        .addComponent(selectDeleteUserLabel)
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addContainerGap())
        );
        GUIDeleteUserLayout.setVerticalGroup(
            GUIDeleteUserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(GUIDeleteUserLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(selectDeleteUserLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(selectDeleteUserScrollPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 174, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(warningDeleteUserLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(GUIDeleteUserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(deleteDeleteUserButton)
                    .addComponent(cancelDeleteUserButton))
                .addContainerGap(13, Short.MAX_VALUE))
        );

        GUINewFolder.setTitle("Nueva Carpeta...");
        GUINewFolder.setLocationByPlatform(true);
        GUINewFolder.setMinimumSize(new java.awt.Dimension(400, 101));
        GUINewFolder.setResizable(false);

        nameNewFolderLabel.setText("Nombre de la Nueva Carpeta:");

        createNewFolderButton.setText("Crear Carpeta");
        createNewFolderButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                createNewFolderButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout GUINewFolderLayout = new javax.swing.GroupLayout(GUINewFolder.getContentPane());
        GUINewFolder.getContentPane().setLayout(GUINewFolderLayout);
        GUINewFolderLayout.setHorizontalGroup(
            GUINewFolderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(GUINewFolderLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(GUINewFolderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(GUINewFolderLayout.createSequentialGroup()
                        .addComponent(nameNewFolderLabel)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(nameNewFolderField, javax.swing.GroupLayout.DEFAULT_SIZE, 233, Short.MAX_VALUE))
                    .addComponent(createNewFolderButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        GUINewFolderLayout.setVerticalGroup(
            GUINewFolderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(GUINewFolderLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(GUINewFolderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(nameNewFolderLabel)
                    .addComponent(nameNewFolderField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(createNewFolderButton)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        GUIMissingData.setTitle("ERROR!!!");
        GUIMissingData.setAlwaysOnTop(true);
        GUIMissingData.setLocationByPlatform(true);
        GUIMissingData.setMinimumSize(new java.awt.Dimension(350, 200));
        GUIMissingData.setResizable(false);

        missingDataLabel.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N
        missingDataLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        missingDataLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUIImages/errorProgram.png"))); // NOI18N
        missingDataLabel.setText("  ¡¡¡¡Error en los Datos!!!!");

        missingDataButton.setText("Aceptar");
        missingDataButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                missingDataButtonActionPerformed(evt);
            }
        });

        missingDataLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        missingDataLabel2.setText("Puede que falten datos necesarios para realizar la acción");

        missingDataLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        missingDataLabel3.setText("o que hayas introducido datos de forma incorrecta");

        javax.swing.GroupLayout GUIMissingDataLayout = new javax.swing.GroupLayout(GUIMissingData.getContentPane());
        GUIMissingData.getContentPane().setLayout(GUIMissingDataLayout);
        GUIMissingDataLayout.setHorizontalGroup(
            GUIMissingDataLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(GUIMissingDataLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(GUIMissingDataLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(missingDataButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(missingDataLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(missingDataLabel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(missingDataLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        GUIMissingDataLayout.setVerticalGroup(
            GUIMissingDataLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(GUIMissingDataLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(missingDataLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addComponent(missingDataLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(missingDataLabel3)
                .addGap(18, 18, 18)
                .addComponent(missingDataButton)
                .addContainerGap())
        );

        GUIServerConfiguration.setTitle("Configuración del Servidor...");
        GUIServerConfiguration.setLocationByPlatform(true);
        GUIServerConfiguration.setMinimumSize(new java.awt.Dimension(630, 380));
        GUIServerConfiguration.setResizable(false);

        ipServerConfigurationLabel.setText("IP del Servidor:");

        ipServerConfigurationTextField.setEditable(false);

        portServerConfigurationLabel.setText("Puerto del Servidor:");

        portServerConfigurationTextField.setEditable(false);

        directoryServerConfigurationLabel.setText("Directorio del Servidor:");

        directoryServerConfigurationTextLabel.setEditable(false);

        directoryConfigurationServerConfigurationLabel.setText("Directorio de Configuración del Servidor:");

        directoryConfigurationServerConfigurationTextField.setEditable(false);

        fileConfigurationServerConfigurationLabel.setText("Fichero de Configuración del Servidor:");

        fileConfigurationServerConfigurationTextLabel.setEditable(false);

        fileLoggingServerConfigurationLabel.setText("Fichero de 'logging' del Servidor:");

        fileUsersServerConfigurationLabel.setText("Fichero con la lista de Usuarios:");

        fileUsersServerConfigurationTextField.setEditable(false);

        directoryNoPrivilegedServerConfigurationLabel.setText("Directorio para Usuarios sin privilegios:");

        directoryNoPrivilegedServerConfigurationTextField.setEditable(false);

        acceptServerConfigurationButton.setText("Aceptar");
        acceptServerConfigurationButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                acceptServerConfigurationButtonActionPerformed(evt);
            }
        });

        fileLoggingUserLabel.setText("Fichero de 'logging' del Cliente:");

        fileLoggingUserTextField.setEditable(false);

        cancelServerConfigurationButton.setText("Cancelar");
        cancelServerConfigurationButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelServerConfigurationButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout GUIServerConfigurationLayout = new javax.swing.GroupLayout(GUIServerConfiguration.getContentPane());
        GUIServerConfiguration.getContentPane().setLayout(GUIServerConfigurationLayout);
        GUIServerConfigurationLayout.setHorizontalGroup(
            GUIServerConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(GUIServerConfigurationLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(GUIServerConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(GUIServerConfigurationLayout.createSequentialGroup()
                        .addComponent(acceptServerConfigurationButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(cancelServerConfigurationButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(GUIServerConfigurationLayout.createSequentialGroup()
                        .addGroup(GUIServerConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(directoryConfigurationServerConfigurationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(ipServerConfigurationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(portServerConfigurationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(directoryServerConfigurationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(fileConfigurationServerConfigurationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(fileLoggingServerConfigurationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(fileUsersServerConfigurationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(directoryNoPrivilegedServerConfigurationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(fileLoggingUserLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(GUIServerConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(fileLoggingUserTextField)
                            .addComponent(ipServerConfigurationTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 410, Short.MAX_VALUE)
                            .addComponent(portServerConfigurationTextField)
                            .addComponent(directoryServerConfigurationTextLabel)
                            .addComponent(directoryNoPrivilegedServerConfigurationTextField)
                            .addComponent(fileUsersServerConfigurationTextField)
                            .addComponent(fileLoggingServerConfigurationTextField)
                            .addComponent(fileConfigurationServerConfigurationTextLabel)
                            .addComponent(directoryConfigurationServerConfigurationTextField))))
                .addContainerGap())
        );
        GUIServerConfigurationLayout.setVerticalGroup(
            GUIServerConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(GUIServerConfigurationLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(GUIServerConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(GUIServerConfigurationLayout.createSequentialGroup()
                        .addGap(6, 6, 6)
                        .addComponent(ipServerConfigurationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addComponent(ipServerConfigurationTextField))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(GUIServerConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(GUIServerConfigurationLayout.createSequentialGroup()
                        .addGap(6, 6, 6)
                        .addComponent(portServerConfigurationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addComponent(portServerConfigurationTextField))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(GUIServerConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(GUIServerConfigurationLayout.createSequentialGroup()
                        .addGap(6, 6, 6)
                        .addComponent(directoryServerConfigurationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addComponent(directoryServerConfigurationTextLabel))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(GUIServerConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(GUIServerConfigurationLayout.createSequentialGroup()
                        .addGap(6, 6, 6)
                        .addComponent(directoryConfigurationServerConfigurationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addComponent(directoryConfigurationServerConfigurationTextField))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(GUIServerConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(GUIServerConfigurationLayout.createSequentialGroup()
                        .addGap(6, 6, 6)
                        .addComponent(fileConfigurationServerConfigurationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addComponent(fileConfigurationServerConfigurationTextLabel))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(GUIServerConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(GUIServerConfigurationLayout.createSequentialGroup()
                        .addGap(6, 6, 6)
                        .addComponent(fileLoggingServerConfigurationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addComponent(fileLoggingServerConfigurationTextField))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(GUIServerConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(GUIServerConfigurationLayout.createSequentialGroup()
                        .addGap(6, 6, 6)
                        .addComponent(fileLoggingUserLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addComponent(fileLoggingUserTextField))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(GUIServerConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(GUIServerConfigurationLayout.createSequentialGroup()
                        .addGap(6, 6, 6)
                        .addComponent(fileUsersServerConfigurationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addComponent(fileUsersServerConfigurationTextField))
                .addGap(6, 6, 6)
                .addGroup(GUIServerConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(GUIServerConfigurationLayout.createSequentialGroup()
                        .addGap(6, 6, 6)
                        .addComponent(directoryNoPrivilegedServerConfigurationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addComponent(directoryNoPrivilegedServerConfigurationTextField))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(GUIServerConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(GUIServerConfigurationLayout.createSequentialGroup()
                        .addGap(2, 2, 2)
                        .addComponent(cancelServerConfigurationButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addComponent(acceptServerConfigurationButton))
                .addContainerGap())
        );

        GUIUMLClient.setTitle("Diagrama UML FTP");
        GUIUMLClient.setMinimumSize(new java.awt.Dimension(1000, 816));

        imageUMLClientLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        imageUMLClientLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUIImages/UML-FTP-Client.png"))); // NOI18N

        javax.swing.GroupLayout GUIUMLClientLayout = new javax.swing.GroupLayout(GUIUMLClient.getContentPane());
        GUIUMLClient.getContentPane().setLayout(GUIUMLClientLayout);
        GUIUMLClientLayout.setHorizontalGroup(
            GUIUMLClientLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(GUIUMLClientLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(imageUMLClientLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        GUIUMLClientLayout.setVerticalGroup(
            GUIUMLClientLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(GUIUMLClientLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(imageUMLClientLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        GUIAbout.setTitle("Sobre el autor...");
        GUIAbout.setLocationByPlatform(true);
        GUIAbout.setMinimumSize(new java.awt.Dimension(500, 280));
        GUIAbout.setResizable(false);

        googleCodeAboutButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUIImages/googleCode.png"))); // NOI18N
        googleCodeAboutButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                googleCodeAboutButtonActionPerformed(evt);
            }
        });

        universityAboutButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUIImages/universityCEULogo.png"))); // NOI18N
        universityAboutButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                universityAboutButtonActionPerformed(evt);
            }
        });

        googleCodeAboutLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        googleCodeAboutLabel.setText("Enlace a Proyecto en Google Code");

        universityAboutLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        universityAboutLabel.setText("Enlace a Universidad CEU San Pablo");

        authorNameAboutLabel.setFont(new java.awt.Font("Arial", 3, 18)); // NOI18N
        authorNameAboutLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        authorNameAboutLabel.setText("<html><a href=\"https://twitter.com/#!/mconde17\">Manuel Conde Gago</a></html>");
        authorNameAboutLabel.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                authorNameAboutLabelMouseClicked(evt);
            }
        });

        authorCareerAboutLabel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        authorCareerAboutLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        authorCareerAboutLabel.setText("3º Ingeniería Informática");

        authorSubjectAboutLabel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        authorSubjectAboutLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        authorSubjectAboutLabel.setText("Programación en Entornos Distribuidos");

        javax.swing.GroupLayout GUIAboutLayout = new javax.swing.GroupLayout(GUIAbout.getContentPane());
        GUIAbout.getContentPane().setLayout(GUIAboutLayout);
        GUIAboutLayout.setHorizontalGroup(
            GUIAboutLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(GUIAboutLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(GUIAboutLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(GUIAboutLayout.createSequentialGroup()
                        .addGroup(GUIAboutLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(googleCodeAboutButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(googleCodeAboutLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(GUIAboutLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(universityAboutButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(universityAboutLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                    .addComponent(authorNameAboutLabel)
                    .addComponent(authorCareerAboutLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(authorSubjectAboutLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        GUIAboutLayout.setVerticalGroup(
            GUIAboutLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(GUIAboutLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(GUIAboutLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(googleCodeAboutButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(universityAboutButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(GUIAboutLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(googleCodeAboutLabel)
                    .addComponent(universityAboutLabel))
                .addGap(18, 18, 18)
                .addComponent(authorNameAboutLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(authorCareerAboutLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(authorSubjectAboutLabel)
                .addContainerGap())
        );

        GUIExecuteCommand.setTitle("Ejecutar Comando...");
        GUIExecuteCommand.setLocationByPlatform(true);
        GUIExecuteCommand.setMinimumSize(new java.awt.Dimension(500, 380));

        commandTextFieldCommand.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                commandTextFieldCommandActionPerformed(evt);
            }
        });

        commandLabelCommand.setText("Comando: ");

        selectDestinyComboCommand.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Local", "Servidor" }));

        responseCommandScroll.setViewportView(responseCommandTextPane);

        javax.swing.GroupLayout GUIExecuteCommandLayout = new javax.swing.GroupLayout(GUIExecuteCommand.getContentPane());
        GUIExecuteCommand.getContentPane().setLayout(GUIExecuteCommandLayout);
        GUIExecuteCommandLayout.setHorizontalGroup(
            GUIExecuteCommandLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(GUIExecuteCommandLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(GUIExecuteCommandLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(GUIExecuteCommandLayout.createSequentialGroup()
                        .addComponent(commandLabelCommand)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(commandTextFieldCommand, javax.swing.GroupLayout.DEFAULT_SIZE, 301, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(selectDestinyComboCommand, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(responseCommandScroll))
                .addContainerGap())
        );
        GUIExecuteCommandLayout.setVerticalGroup(
            GUIExecuteCommandLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(GUIExecuteCommandLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(GUIExecuteCommandLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(selectDestinyComboCommand, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(commandLabelCommand)
                    .addComponent(commandTextFieldCommand, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(responseCommandScroll, javax.swing.GroupLayout.DEFAULT_SIZE, 316, Short.MAX_VALUE)
                .addContainerGap())
        );

        GUIUMLServer.setBackground(new java.awt.Color(255, 255, 255));
        GUIUMLServer.setLocationByPlatform(true);
        GUIUMLServer.setMinimumSize(new java.awt.Dimension(900, 750));

        imageUMLServerLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        imageUMLServerLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUIImages/UML-FTP-Server.png"))); // NOI18N

        javax.swing.GroupLayout GUIUMLServerLayout = new javax.swing.GroupLayout(GUIUMLServer.getContentPane());
        GUIUMLServer.getContentPane().setLayout(GUIUMLServerLayout);
        GUIUMLServerLayout.setHorizontalGroup(
            GUIUMLServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(imageUMLServerLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        GUIUMLServerLayout.setVerticalGroup(
            GUIUMLServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(imageUMLServerLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 750, Short.MAX_VALUE)
        );

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Práctica FTP Básico - Manuel Conde");
        setLocationByPlatform(true);
        setMinimumSize(new java.awt.Dimension(900, 600));

        userLabel.setText("Usuario: ");

        passLabel.setText("Contraseña: ");

        serverLabel.setText("Servidor: ");

        portLabel.setText("Puerto: ");

        portTextField.setMaximumSize(new java.awt.Dimension(6, 30));

        clientStateLabel.setText("Estado del Cliente:");

        clientStateTextPane.setEditable(false);
        clientStateTextPane.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        clientStateScrollPane.setViewportView(clientStateTextPane);

        localFoldersLabel.setText("Directorio Local:");

        passPasswordField.setPreferredSize(new java.awt.Dimension(27, 20));

        serverFoldersLabel.setText("Directorio Remoto:");

        localFoldersScrollPane.setMaximumSize(serverStateScrollPane.getPreferredSize());

        localFoldersTree.setMaximumSize(serverFoldersTree.getPreferredSize());
        localFoldersTree.addTreeExpansionListener(new javax.swing.event.TreeExpansionListener() {
            public void treeExpanded(javax.swing.event.TreeExpansionEvent evt) {
                localFoldersTreeTreeExpanded(evt);
            }
            public void treeCollapsed(javax.swing.event.TreeExpansionEvent evt) {
            }
        });
        localFoldersTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
            public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
                localFoldersTreeValueChanged(evt);
            }
        });
        localFoldersScrollPane.setViewportView(localFoldersTree);

        serverFoldersTree.setMaximumSize(new java.awt.Dimension(2147483647, 2147483647));
        serverFoldersTree.setMinimumSize(new java.awt.Dimension(72, 64));
        serverFoldersTree.addTreeExpansionListener(new javax.swing.event.TreeExpansionListener() {
            public void treeExpanded(javax.swing.event.TreeExpansionEvent evt) {
                serverFoldersTreeTreeExpanded(evt);
            }
            public void treeCollapsed(javax.swing.event.TreeExpansionEvent evt) {
            }
        });
        serverFoldersTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
            public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
                serverFoldersTreeValueChanged(evt);
            }
        });
        serverFoldersScrollPane.setViewportView(serverFoldersTree);

        serverStateLabel.setText("Estado del Servidor:");

        serverStateTextPane.setEditable(false);
        serverStateTextPane.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        serverStateScrollPane.setViewportView(serverStateTextPane);

        localFoldersTextField.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                localFoldersTextFieldActionPerformed(evt);
            }
        });

        serverFoldersTextField.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                serverFoldersTextFieldActionPerformed(evt);
            }
        });

        uploadFileButton.setText("Subir Fichero");
        uploadFileButton.setToolTipText("Subir el fichero seleccionado en local al directorio abierto en remoto");
        uploadFileButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                uploadFileButtonActionPerformed(evt);
            }
        });

        deleteFileButton.setText("Borrar Fichero");
        deleteFileButton.setToolTipText("Borrar el fichero seleccionado en el directorio remoto");
        deleteFileButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                deleteFileButtonActionPerformed(evt);
            }
        });

        downloadFileButton.setText("Descargar Fichero");
        downloadFileButton.setToolTipText("Descargar el fichero seleccionado en el directorio remoto al directorio seleccionado en local");
        downloadFileButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                downloadFileButtonActionPerformed(evt);
            }
        });

        createFolderButton.setText("Crear Directorio");
        createFolderButton.setToolTipText("Crear un nuevo directorio en remoto dentro del directorio remoto seleccionado");
        createFolderButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                createFolderButtonActionPerformed(evt);
            }
        });

        deleteFolderButton.setText("Borrar Directorio");
        deleteFolderButton.setToolTipText("Borrar directorio remoto seleccionado (esté vacio o no)");
        deleteFolderButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                deleteFolderButtonActionPerformed(evt);
            }
        });

        createUserButton.setText("Crear Usuario");
        createUserButton.setToolTipText("Crear un nuevo usuario");
        createUserButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                createUserButtonActionPerformed(evt);
            }
        });

        deleteUserButton.setText("Borrar Usuario");
        deleteUserButton.setToolTipText("Borrar Usuario existente");
        deleteUserButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                deleteUserButtonActionPerformed(evt);
            }
        });

        connectButton.setText("Conectar");
        connectButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                connectButtonActionPerformed(evt);
            }
        });

        disconnectButton.setText("Desconectar");
        disconnectButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                disconnectButtonActionPerformed(evt);
            }
        });

        dateModifiedFileLabel.setText("Fecha de Modificación:");

        dateModifiedFileTextField.setEditable(false);

        sizeFileLabel.setText("Tamaño (Bytes):");

        sizeFileTextField.setEditable(false);

        typeFileLabel.setText("Tipo de Archivo:");

        typeFileTextLabel.setEditable(false);

        permissionsFileLabel.setText("Permisos(r,w,x):");

        permissionsFileTextLabel.setEditable(false);

        visibilityFileLabel.setText("Visibilidad:");

        visibilityFileTextLabel.setEditable(false);

        menuBarFile.setText("Archivo");

        menuBarFileExit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_E, java.awt.event.InputEvent.CTRL_MASK));
        menuBarFileExit.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUIImages/exit.png"))); // NOI18N
        menuBarFileExit.setText("Salir");
        menuBarFileExit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuBarFileExitActionPerformed(evt);
            }
        });
        menuBarFile.add(menuBarFileExit);

        menuBar.add(menuBarFile);

        menuBarEdit.setText("Edición");

        menuBarEditServer.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
        menuBarEditServer.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUIImages/configuration.png"))); // NOI18N
        menuBarEditServer.setText("Configuración del Servidor");
        menuBarEditServer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuBarEditServerActionPerformed(evt);
            }
        });
        menuBarEdit.add(menuBarEditServer);

        menuBarEditStopServer.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F, java.awt.event.InputEvent.CTRL_MASK));
        menuBarEditStopServer.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUIImages/stopServer.png"))); // NOI18N
        menuBarEditStopServer.setText("Detener Servidor");
        menuBarEditStopServer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuBarEditStopServerActionPerformed(evt);
            }
        });
        menuBarEdit.add(menuBarEditStopServer);
        menuBarEdit.add(menuBarEditSeparator);

        menuBarEditExecuteCommand.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.CTRL_MASK));
        menuBarEditExecuteCommand.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUIImages/consolecommand.png"))); // NOI18N
        menuBarEditExecuteCommand.setText("Ejecutar Comando...");
        menuBarEditExecuteCommand.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuBarEditExecuteCommandActionPerformed(evt);
            }
        });
        menuBarEdit.add(menuBarEditExecuteCommand);

        menuBar.add(menuBarEdit);

        menuBarHelp.setText("Ayuda");

        menuBarHelpInstructions.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_H, java.awt.event.InputEvent.CTRL_MASK));
        menuBarHelpInstructions.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUIImages/help.png"))); // NOI18N
        menuBarHelpInstructions.setText("Instrucciones");
        menuBarHelpInstructions.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuBarHelpInstructionsActionPerformed(evt);
            }
        });
        menuBarHelp.add(menuBarHelpInstructions);
        menuBarHelp.add(menuBarHelpSeparator1);

        menuBarHelpProtocol.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_P, java.awt.event.InputEvent.CTRL_MASK));
        menuBarHelpProtocol.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUIImages/protocol.png"))); // NOI18N
        menuBarHelpProtocol.setText("Descripción del Protocolo");
        menuBarHelpProtocol.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuBarHelpProtocolActionPerformed(evt);
            }
        });
        menuBarHelp.add(menuBarHelpProtocol);

        menuBarHelpUMLClient.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_U, java.awt.event.InputEvent.CTRL_MASK));
        menuBarHelpUMLClient.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUIImages/uml.png"))); // NOI18N
        menuBarHelpUMLClient.setText("Diagrama UML Cliente");
        menuBarHelpUMLClient.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuBarHelpUMLClientActionPerformed(evt);
            }
        });
        menuBarHelp.add(menuBarHelpUMLClient);

        menuBarHelpUMLServer.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_I, java.awt.event.InputEvent.CTRL_MASK));
        menuBarHelpUMLServer.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUIImages/uml.png"))); // NOI18N
        menuBarHelpUMLServer.setText("Diagrama UML Servidor");
        menuBarHelpUMLServer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuBarHelpUMLServerActionPerformed(evt);
            }
        });
        menuBarHelp.add(menuBarHelpUMLServer);
        menuBarHelp.add(menuBarHelpSeparator2);

        menuBarHelpAbout.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.CTRL_MASK));
        menuBarHelpAbout.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUIImages/about.png"))); // NOI18N
        menuBarHelpAbout.setText("Acerca de...");
        menuBarHelpAbout.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuBarHelpAboutActionPerformed(evt);
            }
        });
        menuBarHelp.add(menuBarHelpAbout);

        menuBar.add(menuBarHelp);

        setJMenuBar(menuBar);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(separatorUserConnectState)
            .addComponent(separatorClientStateFolders)
            .addComponent(separatorFoldersFileData)
            .addComponent(separatorFileDataServerState)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(clientStateLabel)
                        .addContainerGap())
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(serverStateLabel)
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(dateModifiedFileLabel)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(dateModifiedFileTextField)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(sizeFileLabel)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(sizeFileTextField)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(typeFileLabel)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(typeFileTextLabel)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(permissionsFileLabel)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(permissionsFileTextLabel)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(visibilityFileLabel)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(visibilityFileTextLabel))
                            .addComponent(serverStateScrollPane, javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(clientStateScrollPane, javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                .addComponent(userLabel)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(userTextField)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(passLabel)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(passPasswordField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(serverLabel)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(serverTextField)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(portLabel)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(portTextField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(connectButton, javax.swing.GroupLayout.PREFERRED_SIZE, 116, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(disconnectButton, javax.swing.GroupLayout.PREFERRED_SIZE, 116, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(localFoldersLabel)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(localFoldersTextField))
                                    .addComponent(localFoldersScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(serverFoldersLabel)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(serverFoldersTextField))
                                    .addComponent(serverFoldersScrollPane)))
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                .addComponent(uploadFileButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(deleteFileButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(downloadFileButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(createFolderButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(deleteFolderButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(createUserButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(deleteUserButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                        .addContainerGap())))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(userLabel)
                    .addComponent(userTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(passLabel)
                    .addComponent(serverLabel)
                    .addComponent(serverTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(portLabel)
                    .addComponent(portTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(passPasswordField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(connectButton)
                    .addComponent(disconnectButton))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(separatorUserConnectState, javax.swing.GroupLayout.PREFERRED_SIZE, 5, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(1, 1, 1)
                .addComponent(clientStateLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(clientStateScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 114, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(separatorClientStateFolders, javax.swing.GroupLayout.PREFERRED_SIZE, 2, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(uploadFileButton)
                    .addComponent(deleteFileButton)
                    .addComponent(downloadFileButton)
                    .addComponent(createFolderButton)
                    .addComponent(deleteFolderButton)
                    .addComponent(createUserButton)
                    .addComponent(deleteUserButton))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(localFoldersLabel)
                    .addComponent(localFoldersTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(serverFoldersLabel)
                    .addComponent(serverFoldersTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(localFoldersScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 111, Short.MAX_VALUE)
                    .addComponent(serverFoldersScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(separatorFoldersFileData, javax.swing.GroupLayout.PREFERRED_SIZE, 4, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(dateModifiedFileLabel)
                    .addComponent(dateModifiedFileTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(sizeFileLabel)
                    .addComponent(sizeFileTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(typeFileLabel)
                    .addComponent(typeFileTextLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(permissionsFileLabel)
                    .addComponent(permissionsFileTextLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(visibilityFileLabel)
                    .addComponent(visibilityFileTextLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(separatorFileDataServerState, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(serverStateLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(serverStateScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 149, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void localFoldersTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_localFoldersTextFieldActionPerformed
        SwingWorkerCreateTree createTree = new SwingWorkerCreateTree(localFoldersTree, clientStateTextPane,
                localFoldersTextField.getText(), false, input, output);
        createTree.execute();
    }//GEN-LAST:event_localFoldersTextFieldActionPerformed

    private void menuBarFileExitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuBarFileExitActionPerformed
        System.exit(0);
    }//GEN-LAST:event_menuBarFileExitActionPerformed

    private void deleteUserButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteUserButtonActionPerformed
        selectDeleteUserTable.setModel(UsersOperationsClient.getUserList(input, output, selectDeleteUserTable));
        GUIDeleteUser.setVisible(true);
    }//GEN-LAST:event_deleteUserButtonActionPerformed

    private void createFolderButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_createFolderButtonActionPerformed
        if (!serverDirectory.equals("")) {
            GUINewFolder.setVisible(true);
        } else {
            GUIMissingData.setVisible(true);
        }
    }//GEN-LAST:event_createFolderButtonActionPerformed

    private void deleteFolderButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteFolderButtonActionPerformed
        if (!serverDirectory.equals("")) {
            FilesOperationsClient.deleteFolder(input, output, serverDirectory, clientStateTextPane,
                    serverStateTextPane);
        } else {
            GUIMissingData.setVisible(true);
        }
        FilesOperations.updateLog(clientLog, user.getUserName(),
                connection.getInetAddress().getHostName(), "Delete folder of server: " + serverDirectory);
    }//GEN-LAST:event_deleteFolderButtonActionPerformed

    private void createUserButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_createUserButtonActionPerformed
        GUINewUser.setVisible(true);
    }//GEN-LAST:event_createUserButtonActionPerformed

    private void connectButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_connectButtonActionPerformed
        String username = userTextField.getText();
        String userpass = new String(passPasswordField.getPassword());
        String iphost = serverTextField.getText();
        String porthost = portTextField.getText();
        int port;
        try {
            port = Integer.parseInt(porthost);
        } catch (Exception e) {
            port = -1;
        }
        user = new User(username, userpass);
        if (username.equals("") || iphost.equals("") || port < 0 || port > 65535
                || username.contains(";") || userpass.contains(";")) {
            GUIMissingData.setVisible(true);
        } else {
            try {
                connection = StartCloseSession.startSession(iphost, port, clientStateTextPane);
                output = new PrintWriter(connection.getOutputStream(), true);
                input = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                GUIExtraFunctions.updateTextPane(serverStateTextPane, input);
                String serverResponse = UsersOperationsClient.sendInfoUser(input, output,
                        user, clientStateTextPane);
                if (serverResponse.equals("userNotFound")) {
                    initButtonsDisabled();
                    StartCloseSession.closeSession(connection, output, input, clientStateTextPane,
                            serverStateTextPane);
                } else {
                    if (serverResponse.equals("true")) {
                        userButtonEnabled(true);
                        user.setUserPrivileged(true);
                    } else {
                        userButtonEnabled(false);
                        user.setUserPrivileged(false);
                    }
                    SwingWorkerCreateTree createTree = new SwingWorkerCreateTree(serverFoldersTree,
                            serverStateTextPane, "/", true, input, output);
                    createTree.execute();
                    serverFoldersTextField.setText("/");
                }
            } catch (Exception ex) {
            }
        }
        FilesOperations.updateLog(clientLog, user.getUserName(),
                connection.getInetAddress().getHostName(), "Connect to server...");
    }//GEN-LAST:event_connectButtonActionPerformed

    private void uploadFileButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_uploadFileButtonActionPerformed
        if (!localDirectory.equals("") && !serverDirectory.equals("")) {
            FilesOperationsClient.uploadFile(input, output, localDirectory, serverDirectory,
                    clientStateTextPane, serverStateTextPane);
        } else {
            GUIMissingData.setVisible(true);
        }
        FilesOperations.updateLog(clientLog, user.getUserName(),
                connection.getInetAddress().getHostName(), "Upload file: " + localDirectory
                + " to server directory: " + serverDirectory);
    }//GEN-LAST:event_uploadFileButtonActionPerformed

    private void disconnectButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_disconnectButtonActionPerformed
        Client.StartCloseSession.closeSession(connection, output, input, clientStateTextPane,
                serverStateTextPane);
        connectButton.setEnabled(true);
        initButtonsDisabled();
        FilesOperations.updateLog(clientLog, user.getUserName(),
                connection.getInetAddress().getHostName(), "Disconnect to server...");
    }//GEN-LAST:event_disconnectButtonActionPerformed

    private void localFoldersTreeValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_localFoldersTreeValueChanged
        localDirectory = GUIExtraFunctions.treeValueChanged(evt, dateModifiedFileTextField,
                sizeFileTextField, typeFileTextLabel, permissionsFileTextLabel,
                visibilityFileTextLabel, input, output, false);
    }//GEN-LAST:event_localFoldersTreeValueChanged

    private void serverFoldersTreeValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_serverFoldersTreeValueChanged
        serverDirectory = GUIExtraFunctions.treeValueChanged(evt, dateModifiedFileTextField,
                sizeFileTextField, typeFileTextLabel, permissionsFileTextLabel,
                visibilityFileTextLabel, input, output, true);
    }//GEN-LAST:event_serverFoldersTreeValueChanged

    private void localFoldersTreeTreeExpanded(javax.swing.event.TreeExpansionEvent evt) {//GEN-FIRST:event_localFoldersTreeTreeExpanded
        SwingWorkerExpandTree treeExpanded = new SwingWorkerExpandTree(evt, false, input, output);
        treeExpanded.execute();
    }//GEN-LAST:event_localFoldersTreeTreeExpanded

    private void serverFoldersTreeTreeExpanded(javax.swing.event.TreeExpansionEvent evt) {//GEN-FIRST:event_serverFoldersTreeTreeExpanded
        SwingWorkerExpandTree treeExpanded = new SwingWorkerExpandTree(evt, true, input, output);
        treeExpanded.execute();
    }//GEN-LAST:event_serverFoldersTreeTreeExpanded

    private void missingDataButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_missingDataButtonActionPerformed
        GUIMissingData.setVisible(false);
    }//GEN-LAST:event_missingDataButtonActionPerformed

    private void createNewUserButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_createNewUserButtonActionPerformed
        String user_pass = new String(pass1NewUserPassField.getPassword());
        if (user_pass.equals(new String(pass2NewUserPassField.getPassword()))
                && !nameNewUserField.getText().equals("") && !nameNewUserField.getText().contains(";")
                && !user_pass.contains(";")) {
            User userAux = new User(nameNewUserField.getText(),
                    new String(pass1NewUserPassField.getPassword()), rootNewUserCheckBox.isSelected());
            UsersOperationsClient.createNewUser(input, output, userAux, clientStateTextPane,
                    serverStateTextPane);
        } else {
            GUIMissingData.setVisible(true);
        }
        GUINewUser.setVisible(false);
        FilesOperations.updateLog(clientLog, user.getUserName(),
                connection.getInetAddress().getHostName(), "Create new user: " + nameNewUserField.getText());
    }//GEN-LAST:event_createNewUserButtonActionPerformed

    private void deleteDeleteUserButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteDeleteUserButtonActionPerformed
        DefaultTableModel model = (DefaultTableModel) selectDeleteUserTable.getModel();
        int fileSelected = selectDeleteUserTable.getSelectedRow();
        boolean privileges = false;
        if (model.getValueAt(fileSelected, 2).equals("true")) {
            privileges = true;
        }
        User userAux = new User((String) model.getValueAt(fileSelected, 0),
                (String) model.getValueAt(fileSelected, 1), privileges);
        UsersOperationsClient.deleteUser(input, output, userAux, clientStateTextPane, serverStateTextPane);
        GUIDeleteUser.setVisible(false);
        FilesOperations.updateLog(clientLog, user.getUserName(),
                connection.getInetAddress().getHostName(),
                "Delete user from server: " + userAux.getUserName());
    }//GEN-LAST:event_deleteDeleteUserButtonActionPerformed

    private void serverFoldersTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_serverFoldersTextFieldActionPerformed
        SwingWorkerCreateTree createTree = new SwingWorkerCreateTree(serverFoldersTree,
                serverStateTextPane, serverFoldersTextField.getText(), true, input, output);
        createTree.execute();
    }//GEN-LAST:event_serverFoldersTextFieldActionPerformed

    private void downloadFileButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_downloadFileButtonActionPerformed
        if (!localDirectory.equals("") && !serverDirectory.equals("")) {
            FilesOperationsClient.downloadFile(input, output, serverDirectory, localDirectory,
                    clientStateTextPane, serverStateTextPane);
        } else {
            GUIMissingData.setVisible(true);
        }
        FilesOperations.updateLog(clientLog, user.getUserName(),
                connection.getInetAddress().getHostName(), "Download file from server: "
                + serverDirectory + " to local directory: " + localDirectory);
    }//GEN-LAST:event_downloadFileButtonActionPerformed

    private void menuBarHelpUMLClientActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuBarHelpUMLClientActionPerformed
        GUIUMLClient.setVisible(true);
    }//GEN-LAST:event_menuBarHelpUMLClientActionPerformed

    private void menuBarEditServerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuBarEditServerActionPerformed
        try {
            OperationsRefactor.outputMessage(output, "getserverconfiguration");
            String response = input.readLine();
            String[] options = response.split(";");
            ipServerConfigurationTextField.setText(options[0]);
            portServerConfigurationTextField.setText(options[1]);
            directoryServerConfigurationTextLabel.setText(options[2]);
            directoryConfigurationServerConfigurationTextField.setText(options[3]);
            fileConfigurationServerConfigurationTextLabel.setText(options[4]);
            fileLoggingServerConfigurationTextField.setText(options[5]);
            fileLoggingUserTextField.setText(clientLog);
            fileUsersServerConfigurationTextField.setText(options[6]);
            directoryNoPrivilegedServerConfigurationTextField.setText(options[7]);
        } catch (Exception e) {
            System.out.println(e);
        }
        GUIServerConfiguration.setVisible(true);
    }//GEN-LAST:event_menuBarEditServerActionPerformed

    private void menuBarHelpInstructionsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuBarHelpInstructionsActionPerformed
        goToURL("http://code.google.com/p/ftpbasico-mconde17/downloads/detail?name=Instrucciones%20de%20la%20Aplicaci%C3%B3n.pdf&can=2&q=");
    }//GEN-LAST:event_menuBarHelpInstructionsActionPerformed

    private void menuBarHelpProtocolActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuBarHelpProtocolActionPerformed
        goToURL("http://code.google.com/p/ftpbasico-mconde17/downloads/detail?name=Especificaci%C3%B3n%20del%20Protocolo.pdf&can=2&q=");
    }//GEN-LAST:event_menuBarHelpProtocolActionPerformed

    private void menuBarHelpAboutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuBarHelpAboutActionPerformed
        GUIAbout.setVisible(true);
    }//GEN-LAST:event_menuBarHelpAboutActionPerformed

    private void googleCodeAboutButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_googleCodeAboutButtonActionPerformed
        goToURL("http://code.google.com/p/ftpbasico-mconde17/");
    }//GEN-LAST:event_googleCodeAboutButtonActionPerformed

    private void universityAboutButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_universityAboutButtonActionPerformed
        goToURL("http://www.uspceu.es");
    }//GEN-LAST:event_universityAboutButtonActionPerformed

    private void cancelDeleteUserButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelDeleteUserButtonActionPerformed
        OperationsRefactor.outputMessage(output, "cancelOperation");
        GUIDeleteUser.setVisible(false);
        FilesOperations.updateLog(clientLog, user.getUserName(),
                connection.getInetAddress().getHostName(), "Delete user cancel");
    }//GEN-LAST:event_cancelDeleteUserButtonActionPerformed

    private void deleteFileButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteFileButtonActionPerformed
        if (!serverDirectory.equals("")) {
            FilesOperationsClient.deleteFile(input, output, serverDirectory, clientStateTextPane,
                    serverStateTextPane);
        } else {
            GUIMissingData.setVisible(true);
        }
        FilesOperations.updateLog(clientLog, user.getUserName(),
                connection.getInetAddress().getHostName(), "Delete file of server: " + serverDirectory);
    }//GEN-LAST:event_deleteFileButtonActionPerformed

    private void acceptServerConfigurationButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_acceptServerConfigurationButtonActionPerformed
        FilesOperationsClient.modifyServerLogDirectory(input, output,
                fileLoggingServerConfigurationTextField.getText(), clientStateTextPane, serverStateTextPane);
        GUIServerConfiguration.setVisible(false);
        FilesOperations.updateLog(clientLog, user.getUserName(),
                connection.getInetAddress().getHostName(), "Modify name from file server log");
    }//GEN-LAST:event_acceptServerConfigurationButtonActionPerformed

    private void cancelServerConfigurationButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelServerConfigurationButtonActionPerformed
        GUIServerConfiguration.setVisible(false);
        FilesOperations.updateLog(clientLog, user.getUserName(),
                connection.getInetAddress().getHostName(), "Cancel modify name from file server log");
    }//GEN-LAST:event_cancelServerConfigurationButtonActionPerformed

    private void authorNameAboutLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_authorNameAboutLabelMouseClicked
        goToURL("https://twitter.com/#!/mconde17");
    }//GEN-LAST:event_authorNameAboutLabelMouseClicked

    private void createNewFolderButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_createNewFolderButtonActionPerformed
        if (!serverDirectory.equals("") && !nameNewFolderField.getText().contains(";")) {
            FilesOperationsClient.createFolder(input, output, serverDirectory,
                    nameNewFolderField.getText(), clientStateTextPane, serverStateTextPane);
        } else {
            GUIMissingData.setVisible(true);
        }
        GUINewFolder.setVisible(false);
        FilesOperations.updateLog(clientLog, user.getUserName(),
                connection.getInetAddress().getHostName(),
                "Create new folder into server: " + nameNewFolderField.getText());
    }//GEN-LAST:event_createNewFolderButtonActionPerformed

    private void commandTextFieldCommandActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_commandTextFieldCommandActionPerformed
        if (selectDestinyComboCommand.getSelectedItem().equals("Local")) {
            GUIExtraFunctions.updateTextPane(responseCommandTextPane,
                    FilesOperations.executeCommand(commandTextFieldCommand.getText()));
        } else {
            if (user.getUserPrivileged()) {
                output.println("executecommand;" + commandTextFieldCommand.getText());
                output.flush();
                try {
                    String lenght = input.readLine();
                    char[] response = new char[Integer.parseInt(lenght)];
                    input.read(response);
                    GUIExtraFunctions.updateTextPane(responseCommandTextPane, new String(response));
                } catch (IOException | NumberFormatException e) {
                }
            } else {
                GUIMissingData.setVisible(true);
            }
        }
        FilesOperations.updateLog(clientLog, user.getUserName(),
                connection.getInetAddress().getHostName(),
                "Execute command: " + commandTextFieldCommand.getText()
                + "; In: " + selectDestinyComboCommand.getSelectedItem());
    }//GEN-LAST:event_commandTextFieldCommandActionPerformed

    private void menuBarEditExecuteCommandActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuBarEditExecuteCommandActionPerformed
        GUIExecuteCommand.setVisible(true);
    }//GEN-LAST:event_menuBarEditExecuteCommandActionPerformed

    private void menuBarEditStopServerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuBarEditStopServerActionPerformed
        output.println("stopserver");
        output.flush();
        GUIExtraFunctions.updateTextPane(clientStateTextPane, "Conexión perdida con el Servidor");
        GUIExtraFunctions.updateTextPane(serverStateTextPane, "Servidor Detenido");
        connectButton.setEnabled(true);
        initButtonsDisabled();
        FilesOperations.updateLog(clientLog, user.getUserName(),
                connection.getInetAddress().getHostName(), "Close Server");
    }//GEN-LAST:event_menuBarEditStopServerActionPerformed

    private void menuBarHelpUMLServerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuBarHelpUMLServerActionPerformed
        GUIUMLServer.setVisible(true);
    }//GEN-LAST:event_menuBarHelpUMLServerActionPerformed

    public static void main(String args[]) {
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info :
                    javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(
                    GUIPrincipal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }

        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new GUIPrincipal().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JFrame GUIAbout;
    private javax.swing.JFrame GUIDeleteUser;
    private javax.swing.JFrame GUIExecuteCommand;
    private javax.swing.JFrame GUIMissingData;
    private javax.swing.JFrame GUINewFolder;
    private javax.swing.JFrame GUINewUser;
    private javax.swing.JFrame GUIServerConfiguration;
    private javax.swing.JFrame GUIUMLClient;
    private javax.swing.JFrame GUIUMLServer;
    private javax.swing.JButton acceptServerConfigurationButton;
    private javax.swing.JLabel authorCareerAboutLabel;
    private javax.swing.JLabel authorNameAboutLabel;
    private javax.swing.JLabel authorSubjectAboutLabel;
    private javax.swing.JButton cancelDeleteUserButton;
    private javax.swing.JButton cancelServerConfigurationButton;
    private javax.swing.JLabel clientStateLabel;
    private javax.swing.JScrollPane clientStateScrollPane;
    private javax.swing.JTextPane clientStateTextPane;
    private javax.swing.JLabel commandLabelCommand;
    private javax.swing.JTextField commandTextFieldCommand;
    private javax.swing.JButton connectButton;
    private javax.swing.JButton createFolderButton;
    private javax.swing.JButton createNewFolderButton;
    private javax.swing.JButton createNewUserButton;
    private javax.swing.JButton createUserButton;
    private javax.swing.JLabel dateModifiedFileLabel;
    private javax.swing.JTextField dateModifiedFileTextField;
    private javax.swing.JButton deleteDeleteUserButton;
    private javax.swing.JButton deleteFileButton;
    private javax.swing.JButton deleteFolderButton;
    private javax.swing.JButton deleteUserButton;
    private javax.swing.JLabel directoryConfigurationServerConfigurationLabel;
    private javax.swing.JTextField directoryConfigurationServerConfigurationTextField;
    private javax.swing.JLabel directoryNoPrivilegedServerConfigurationLabel;
    private javax.swing.JTextField directoryNoPrivilegedServerConfigurationTextField;
    private javax.swing.JLabel directoryServerConfigurationLabel;
    private javax.swing.JTextField directoryServerConfigurationTextLabel;
    private javax.swing.JButton disconnectButton;
    private javax.swing.JButton downloadFileButton;
    private javax.swing.JLabel fileConfigurationServerConfigurationLabel;
    private javax.swing.JTextField fileConfigurationServerConfigurationTextLabel;
    private javax.swing.JLabel fileLoggingServerConfigurationLabel;
    private javax.swing.JTextField fileLoggingServerConfigurationTextField;
    private javax.swing.JLabel fileLoggingUserLabel;
    private javax.swing.JTextField fileLoggingUserTextField;
    private javax.swing.JLabel fileUsersServerConfigurationLabel;
    private javax.swing.JTextField fileUsersServerConfigurationTextField;
    private javax.swing.JButton googleCodeAboutButton;
    private javax.swing.JLabel googleCodeAboutLabel;
    private javax.swing.JLabel imageUMLClientLabel;
    private javax.swing.JLabel imageUMLServerLabel;
    private javax.swing.JLabel ipServerConfigurationLabel;
    private javax.swing.JTextField ipServerConfigurationTextField;
    private javax.swing.JLabel localFoldersLabel;
    private javax.swing.JScrollPane localFoldersScrollPane;
    private javax.swing.JTextField localFoldersTextField;
    private javax.swing.JTree localFoldersTree;
    private javax.swing.JMenuBar menuBar;
    private javax.swing.JMenu menuBarEdit;
    private javax.swing.JMenuItem menuBarEditExecuteCommand;
    private javax.swing.JPopupMenu.Separator menuBarEditSeparator;
    private javax.swing.JMenuItem menuBarEditServer;
    private javax.swing.JMenuItem menuBarEditStopServer;
    private javax.swing.JMenu menuBarFile;
    private javax.swing.JMenuItem menuBarFileExit;
    private javax.swing.JMenu menuBarHelp;
    private javax.swing.JMenuItem menuBarHelpAbout;
    private javax.swing.JMenuItem menuBarHelpInstructions;
    private javax.swing.JMenuItem menuBarHelpProtocol;
    private javax.swing.JPopupMenu.Separator menuBarHelpSeparator1;
    private javax.swing.JPopupMenu.Separator menuBarHelpSeparator2;
    private javax.swing.JMenuItem menuBarHelpUMLClient;
    private javax.swing.JMenuItem menuBarHelpUMLServer;
    private javax.swing.JButton missingDataButton;
    private javax.swing.JLabel missingDataLabel;
    private javax.swing.JLabel missingDataLabel2;
    private javax.swing.JLabel missingDataLabel3;
    private javax.swing.JTextField nameNewFolderField;
    private javax.swing.JLabel nameNewFolderLabel;
    private javax.swing.JTextField nameNewUserField;
    private javax.swing.JLabel nameNewUserLabel;
    private javax.swing.JLabel pass1NewUserLabel;
    private javax.swing.JPasswordField pass1NewUserPassField;
    private javax.swing.JLabel pass2NewUserLabel;
    private javax.swing.JPasswordField pass2NewUserPassField;
    private javax.swing.JLabel passLabel;
    private javax.swing.JPasswordField passPasswordField;
    private javax.swing.JLabel permissionsFileLabel;
    private javax.swing.JTextField permissionsFileTextLabel;
    private javax.swing.JLabel portLabel;
    private javax.swing.JLabel portServerConfigurationLabel;
    private javax.swing.JTextField portServerConfigurationTextField;
    private javax.swing.JTextField portTextField;
    private javax.swing.JScrollPane responseCommandScroll;
    private javax.swing.JTextPane responseCommandTextPane;
    private javax.swing.JCheckBox rootNewUserCheckBox;
    private javax.swing.JLabel selectDeleteUserLabel;
    private javax.swing.JScrollPane selectDeleteUserScrollPanel;
    private javax.swing.JTable selectDeleteUserTable;
    private javax.swing.JComboBox selectDestinyComboCommand;
    private javax.swing.JSeparator separatorClientStateFolders;
    private javax.swing.JSeparator separatorFileDataServerState;
    private javax.swing.JSeparator separatorFoldersFileData;
    private javax.swing.JSeparator separatorUserConnectState;
    private javax.swing.JLabel serverFoldersLabel;
    private javax.swing.JScrollPane serverFoldersScrollPane;
    private javax.swing.JTextField serverFoldersTextField;
    private javax.swing.JTree serverFoldersTree;
    private javax.swing.JLabel serverLabel;
    private javax.swing.JLabel serverStateLabel;
    private javax.swing.JScrollPane serverStateScrollPane;
    private javax.swing.JTextPane serverStateTextPane;
    private javax.swing.JTextField serverTextField;
    private javax.swing.JLabel sizeFileLabel;
    private javax.swing.JTextField sizeFileTextField;
    private javax.swing.JLabel typeFileLabel;
    private javax.swing.JTextField typeFileTextLabel;
    private javax.swing.JButton universityAboutButton;
    private javax.swing.JLabel universityAboutLabel;
    private javax.swing.JButton uploadFileButton;
    private javax.swing.JLabel userLabel;
    private javax.swing.JTextField userTextField;
    private javax.swing.JLabel visibilityFileLabel;
    private javax.swing.JTextField visibilityFileTextLabel;
    private javax.swing.JLabel warningDeleteUserLabel;
    // End of variables declaration//GEN-END:variables
}
